2013-12-07 1 views
0

У меня есть класс со статическими методами, которые предназначены для использования в других видах деятельности и сервисах. Эти методы должны показывать Тосты и обновлять объекты для любых действий.Сбой приложения при попытке отобразить Toast

package com.app.myapp;  
import java.io.IOException;  
import java.io.UnsupportedEncodingException;  
import java.util.ArrayList;  
import java.util.List;  
import org.apache.http.HttpEntity;  
import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair;  
import org.apache.http.ParseException;  
import org.apache.http.client.ClientProtocolException;  
import org.apache.http.client.HttpClient;  
import org.apache.http.client.entity.UrlEncodedFormEntity;  
import org.apache.http.client.methods.HttpPost;  
import org.apache.http.impl.client.DefaultHttpClient;  
import org.apache.http.message.BasicNameValuePair;  
import org.apache.http.util.EntityUtils;  
import org.json.JSONException;  
import org.json.JSONObject;  
import android.content.Context;  
import android.util.Log;  
import android.widget.Toast; 

public class Wall { 

    private static final String TAG_Send_Error = "Send_error"; 
    static String res; 

    public Wall() { 

    } 

    public static void Post(final String owner_id, final String message, 
      final String access_token) { 
     res = ""; 

     new Thread(new Runnable() { 

      @Override 
      public void run() { 

       // 
       List<NameValuePair> params = new ArrayList<NameValuePair>(); 
       params.add(new BasicNameValuePair("owner_id", owner_id)); 
       params.add(new BasicNameValuePair("message", message 
         + Constants.addtext)); 
       params.add(new BasicNameValuePair("v", Constants.API_VERSION)); 
       params.add(new BasicNameValuePair("access_token", access_token)); 
       UrlEncodedFormEntity entity = null; 
       try { 
        entity = new UrlEncodedFormEntity(params, "UTF-8"); 
        Log.d("send", "start message sending"); 
        HttpPost request = new HttpPost(Constants.API_URI 
          + "wall.post"); 
        request.setEntity(entity);// 
        Log.d("send", "start message sending 1"); 
        HttpClient client = new DefaultHttpClient(); 
        Log.d("send", "start message sending 2"); 
        HttpResponse response = null; 
        response = client.execute(request); 
        Log.d("send", "start message sending 3"); 
        HttpEntity entry = response.getEntity(); 
        Log.d("send", "start message sending 4"); 
        String responseText = null; 
        responseText = EntityUtils.toString(entry); 
        Log.d("send", responseText.toString()); 
        JSONObject json = null; 
        json = new JSONObject(responseText); 
        if (json.has("error")) { 
         json = json.getJSONObject("error"); 
         int err = json.getInt("error_code"); 
         switch (err) { 
         case 0 - 15: 
          res = json.getString("error_msg"); 
          break; 
         case 16: 

          break; 
         case 17: 

          break; 
         case 100: 
          res = "Invalid number of papams"; 
          break; 
         } 
        } else { 
         res = "OK"; 
        } 
       } catch (JSONException e) { 
        Log.e(TAG_Send_Error, e.toString()); 
       } catch (UnsupportedEncodingException e1) { 
        Log.e(TAG_Send_Error, e1.toString()); 
       } catch (ClientProtocolException e) { 
        Log.e(TAG_Send_Error, e.toString()); 
       } catch (IOException e) { 
        Log.e(TAG_Send_Error, e.toString()); 
       } catch (ParseException e) { 
        Log.e(TAG_Send_Error, e.toString()); 
       } 
       // Toast.makeText(context, res, 3).show(); 
      // return res; 
      } 

     }); 
    } 
} 

Класс активности:

package com.app.myapp;  
    import android.app.Activity;  
    import android.content.SharedPreferences;  
    import android.os.Bundle;  
    import android.preference.PreferenceManager;  
    import android.util.Log;  
    import android.view.View;  
    import android.view.View.OnClickListener;  
    import android.widget.Button;  
    import android.widget.EditText;  
    import android.widget.RadioButton;  
    import android.widget.Toast; 

    public class SendTestActivity extends Activity implements OnClickListener { 

     private EditText id_edit, txtedit; 
     private RadioButton sms_btn, wall_btn; 
     private Button sendbtn; 

     SharedPreferences prf; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_send_test); 

      prf = PreferenceManager.getDefaultSharedPreferences(this); 

      id_edit = (EditText) findViewById(R.id.Send_a_id); 
      txtedit = (EditText) findViewById(R.id.Send_A_text); 
      sms_btn = (RadioButton) findViewById(R.id.Send_A_sms); 
      wall_btn = (RadioButton) findViewById(R.id.Send_A_wall); 
      sendbtn = (Button) findViewById(R.id.Send_A_sendbtn); 
      sendbtn.setOnClickListener(this); 
      prf = PreferenceManager.getDefaultSharedPreferences(this); 

     } 

     @Override 
     public void onClick(View v) { 

      switch (v.getId()) { 
      case R.id.Send_A_sendbtn: 

       if (sms_btn.isChecked()) { 

       } 
       if (wall_btn.isChecked()) { 
        Log.d("MY", "Отправка записи на стену"); 
        Wall.Post(getApplicationContext(), 
             id_edit.getText().toString(), txtedit.getText() 
         .toString(), prf.getString("access_token", "")); 
       } 
       txtedit.setText(""); 
       //Toast.makeText(getApplicationContext(), "ok", 3) 
         //.show(); 
       break; 
      case R.id.Send_A_sms: 

       break; 
      case R.id.Send_A_wall: 

       break; 
      } 
     } 
    } 

мне нужен универсальный метод, который работает в собственном потоке, и что я могу позвонить из любой точки мира. Этот метод должен иметь возможность изменять объекты в действии, которые его называют, и показывать тосты. Как я могу решить свою проблему? AsyncTask?

+1

Что делать, если вы передаете SendTestActivity.this как контекст к Тост? В противном случае отправьте сообщение LogCat. – cYrixmorten

ответ

0

Julia Hexen, ваше решение не имеет результатов, приложение также аварийно завершает работу.

Я решил свою проблему. Перед тем как создать новую тему, я был создан Handler:

final Handler handler = new Handler() { 
    public void handleMessage(android.os.Message msg) { 
     // здесь все обращения к интерфейсу 
     Toast.makeText(context, res, 3).show(); 
    } 
}; 

Наконец, в конце кода нового потока я называю метод:

handler.sendEmptyMessage(0);