2015-12-30 145 views
0

我有一個應用程序應該將電話號碼發送到php web服務並獲得響應。 在我的代碼中有一個按鈕,它應該執行另一個擴展AsyncTask類的類。在按鈕OnClick動作中執行AsyncTask類

當我按下應用程序崩潰按鈕的問題。

public class JSONTransmitter extends AsyncTask<JSONObject, JSONObject, JSONObject> 
    { 

    String url = "http://192.168.1.6:89/Derdeery/banks.php"; 


    protected JSONObject doInBackground(JSONObject... data) { 
     JSONObject json = data[0]; 
     HttpClient client = new DefaultHttpClient(); 
     HttpConnectionParams.setConnectionTimeout(client.getParams(), 100000); 
     StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().permitNetwork().build()); 
     JSONObject jsonResponse = null; 

     HttpPost post = new HttpPost(url); 
     try { 
      StringEntity se = new StringEntity("json="+json.toString()); 
      post.addHeader("content-type", "application/x-www-form-urlencoded"); 
      post.setEntity(se); 

      HttpResponse response; 
      response = client.execute(post); 
      String resFromServer = org.apache.http.util.EntityUtils.toString(response.getEntity()); 

      jsonResponse=new JSONObject(resFromServer); 

      Log.i("Response from server", jsonResponse.getString("msg")); 

     } catch (Exception e) { e.printStackTrace();} 

     return jsonResponse; 
    } 

} 

主要活動

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    Button b = (Button)findViewById(R.id.button1) ; 


     b .setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       try { 
       JSONObject toSend = new JSONObject(); 
       toSend.put("msg", 1); 
       Toast.makeText(getApplicationContext(), mymethod(),Toast.LENGTH_LONG); 
       JSONTransmitter transmitter = new JSONTransmitter(); 
       transmitter.execute(new JSONObject[] {toSend}); 

      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

       } 
      });  
    } 

logcat的

12-30 09:02:57.734: W/dalvikvm(792): threadid=1: thread exiting with uncaught exception (group=0x40a70930) 
12-30 09:02:57.864: E/AndroidRuntime(792): FATAL EXCEPTION: main 
12-30 09:02:57.864: E/AndroidRuntime(792): java.lang.NullPointerException 
12-30 09:02:57.864: E/AndroidRuntime(792): at com.coffeecodes.coffecodesdoodle.MainActivity.mymethod(MainActivity.java:49) 
12-30 09:02:57.864: E/AndroidRuntime(792): at com.coffeecodes.coffecodesdoodle.MainActivity$1.onClick(MainActivity.java:34) 
12-30 09:02:57.864: E/AndroidRuntime(792): at android.view.View.performClick(View.java:4202) 
12-30 09:02:57.864: E/AndroidRuntime(792): at android.view.View$PerformClick.run(View.java:17340) 
12-30 09:02:57.864: E/AndroidRuntime(792): at android.os.Handler.handleCallback(Handler.java:725) 
12-30 09:02:57.864: E/AndroidRuntime(792): at android.os.Handler.dispatchMessage(Handler.java:92) 
12-30 09:02:57.864: E/AndroidRuntime(792): at android.os.Looper.loop(Looper.java:137) 
12-30 09:02:57.864: E/AndroidRuntime(792): at android.app.ActivityThread.main(ActivityThread.java:5039) 
12-30 09:02:57.864: E/AndroidRuntime(792): at java.lang.reflect.Method.invokeNative(Native Method) 
12-30 09:02:57.864: E/AndroidRuntime(792): at java.lang.reflect.Method.invoke(Method.java:511) 
12-30 09:02:57.864: E/AndroidRuntime(792): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
12-30 09:02:57.864: E/AndroidRuntime(792): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
12-30 09:02:57.864: E/AndroidRuntime(792): at dalvik.system.NativeStart.main(Native Method) 
12-30 09:02:58.146: D/dalvikvm(792): GC_CONCURRENT freed 389K, 16% free 2833K/3340K, paused 74ms+26ms, total 390ms 
12-30 09:05:35.477: I/Process(792): Sending signal. PID: 792 SIG: 9 
+0

PLZ發佈烏爾日誌貓。 – kevz

回答

0

請你代替此行StringEntity se = new StringEntity("json="+json.toString());StringEntity se = new StringEntity(json.toString());

和我的問題是您驗證電話號碼到您的Web服務之前保存如果是,請發送JSONObject toSend=new JSONObject(); toSend.put("msg", Phone_Number);

+0

StringEntity se = new StringEntity(json.toString());會崩潰的應用程序 – JEREEF

+0

你忘了爲AsyncTask創建構造函數並在其上傳遞JsonObject。 –

0
`12-30 09:02:57.864: E/AndroidRuntime(792): java.lang.NullPointerException 
12-30 09:02:57.864: E/AndroidRuntime(792): at com.coffeecodes.coffecodesdoodle.MainActivity.mymethod(MainActivity.java:49)` 

問題出現在MainActivity.java文件的第49行。 也許你應該刪除這個吐司。 你甚至不要在這個吐司上調用show()方法。

Toast.makeText(getApplicationContext(), mymethod(),Toast.LENGTH_LONG); 

應該是:

Toast.makeText(getApplicationContext(), mymethod(),Toast.LENGTH_LONG).show();