2015-07-05 148 views
1

执行asynctask时,我的应用程序崩溃。我尝试从android发送数据到服务器,但我的应用程序崩溃时执行AsyncTask `input input = new input(); input.execute();执行asynctask时应用程序崩溃

mainActivity = this; 
    latitude = "-6.711647"; 
    longitude ="108.5413";` 


public class input extends AsyncTask<String, String, String> 
{ 

    HashMap<String, String> user = db.getUserDetails(); 
    String email = user.get("email"); 
    String success; 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pDialog = new ProgressDialog(MainActivity.this); 
     pDialog.setMessage("Sending Data to server..."); 
     pDialog.setIndeterminate(false); 
     pDialog.show(); 
    } 


    @Override 
    protected String doInBackground(String... arg0) { 
     String strEMAIL = email.toString(); 
     String strNama = latitude.toString(); 
     String strProdi = longitude.toString(); 


     List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     params.add(new BasicNameValuePair("email", strEMAIL)); 
     params.add(new BasicNameValuePair("latitude", strNama)); 
     params.add(new BasicNameValuePair("longitude", strProdi)); 


     JSONObject json = jParser.makeHttpRequest(url, "POST", params); 

     try { 
      success = json.getString("success"); 

     } catch (Exception e) { 
      Toast.makeText(getApplicationContext(), "Error", 
        Toast.LENGTH_LONG).show(); 
     } 
     return null; 
    } 
    protected void onPostExecute(String file_url) { 
     // dismiss the dialog once done 
     pDialog.dismiss(); 

     if (success.equals("1")) 
     { 
      Toast.makeText(getApplicationContext(), "kirim data Sukses!!!", Toast.LENGTH_LONG).show(); 
     } 
     else 
     { 
      Toast.makeText(getApplicationContext(), "kirim data Gagal!!!", Toast.LENGTH_LONG).show(); 

     } 
    } 
} 

这是我的完整代码http://pastebin.com/jRdxeQKG 这我的logcat http://prntscr.com/7p3vbz

+0

什么是例外?发布你的logcat。 –

回答

1

参考db当你onCreate()调用new input()为空。

解决方案:调用new input()之前就初始化db

db = new SQLiteHandler(getApplicationContext()); 
input input = new input(); 

顺便说一句,有从设计角度来看许多问题,但是这将解决(之一)的崩溃(ES) 。

+0

不会崩溃(es),但不发送数据 – Tiesna

+0

这应该是另一个问题,虽然 –

0

以小写字母开头的班级名称是不好的做法。 input应该是Input,应该更具描述性。

您的数据库初始化应该来调用之前执行的AsyncTask

你需要使用它之前,真正了解的AsyncTask。您声明三个泛型类型为您的AsyncTask

public class input extends AsyncTask<String, String, String> {

但使用没有。你的doInBackground方法应该返回一个类型为NameValuePairJSONObject的实例。

AsyncTask的第一个通用类型是params,这就是你打算传递给doInBackground方法的东西。你说这是String,但不要传入任何字符串input.execute();这不是问题,因为你还没有试图使用args0,但是如果你尝试使用,你的应用会崩溃。我只是认为你应该首先阅读AsyncTask并了解基础知识。它会为你节省很多麻烦。干杯。

+0

所以我应该怎么做 – Tiesna

相关问题