2014-11-23 60 views
0

我改變擴展活動來擴展片段和我的AsynkTask類在擴展活動中很好地工作,但是當在擴展片段中使用並且在登錄到我的應用程序時關閉我稱爲類DownloadJson在點擊我應該怎麼辦,請幫我當在片段中使用asynctask我的應用程序強制關閉

public class OmegaFragment extends Fragment implements View.OnClickListener { 



JSONObject jsonobject; 
JSONArray jsonarray; 
private PendingIntent pendingIntent; 
EditText ocUserName ; 
EditText ocPassword; 

View view; 




@Override 

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_omega, container, false); 

} 




    private class DownloadJSON extends AsyncTask<Void, Void, Integer> { 



    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

    } 

    @Override 
    protected Integer doInBackground(Void... params) { 
     // Create an array 
     int isCorrect= 0; 
     jsonarray = JSONfunctions.getJSONfromURL(mUrl); 


        EditText ocUserName1 =(EditText)view.findViewById(R.id.userNameText); 
        EditText ocPassword1 =(EditText)view.findViewById(R.id.passwordText); 
        isCorrect = 1; 



     return isCorrect; 
    } 

    @Override 
    protected void onPostExecute(Integer args) { 
     mFragmentCallback.onTaskDone(); 
     super.onPostExecute(args); 
     mProgressDialog.dismiss(); 
    } 
} 
public void onClick(View v) {  
    if (v.getId() == R.id.button1) 
    { 
     Button button = (Button) v; 

     // EditText ocUserName =(EditText)view.findViewById(R.id.userNameText); 
    // EditText ocPassword =(EditText)view.findViewById(R.id.passwordText); 
     boolean flag=true; 






          mUrl = global.apiurl +":"+global.apiport+ "/"+global.apiname+"/"+global.controller+"/" + ocUserName.getText().toString() + "/" + ocPassword.getText().toString() + "/0"; 


         try { 
          isAccess = (new DownloadJSON().execute()).get(); 
         } catch (InterruptedException e) { 
          e.printStackTrace(); 
         } catch (ExecutionException e) { 
          e.printStackTrace(); 
         } 
         if (isAccess == 1) 
         { 
          Intent intentMain = new Intent(getActivity() ,hozeactivity.class); 

logcat的輸出:

11-22 23:19:18.822: ERROR/AndroidRuntime(1292): FATAL EXCEPTION: main 
    java.lang.NullPointerException 
    at com.mesbahSoft.quran.OmegaFragment.onClick(OmegaFragment.java:248) 
    at android.view.View.performClick(View.java:3460) 
    at android.view.View$PerformClick.run(View.java:13955) 
    at android.os.Handler.handleCallback(Handler.java:605) 
    at android.os.Handler.dispatchMessage(Handler.java:92) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:4340) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
    at dalvik.system.NativeStart.main(Native Method) 
+0

Post Logcat錯誤 – 2014-11-23 07:16:57

+0

並解釋你在doInbackground – 2014-11-23 07:17:55

+0

中試圖做什麼請發佈你的Logcat錯誤,但我想你可能在doInBackground方法中查找視圖時遇到一些問題。 – 2014-11-23 07:21:19

回答

0

正如我告訴你,你有找到你的看法有問題了。簡而言之,刪除doInBackground方法中的這些代碼行,並將它們移動到onCreateView中。事情是這樣的:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_omega, container, false); 
    EditText ocUserName1 =(EditText)view.findViewById(R.id.userNameText); 
    EditText ocPassword1 =(EditText)view.findViewById(R.id.passwordText); 

} 

這樣你會解決空指針異常,但如果你希望你的請求發送到服務器,你必須致電AsynchTask。 對於其餘的我建議你看看:

文件 - >新建 - >其他 - > Android的活動 - > LoginActivity

它具有良好的樣品供您下手。

+0

即時移動此創建但強制關閉 – chy 2014-11-23 08:10:55

+0

只是請發佈logcat – 2014-11-23 08:19:15

+0

我張貼在上面的logcat – chy 2014-11-23 08:54:49

0

改變你OncreateView()方法,如下面

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    view = inflater.inflate(R.layout.fragment_omega, container, false); 
    ocUserName1 =(EditText)view.findViewById(R.id.userNameText); 
    ocPassword1 =(EditText)view.findViewById(R.id.passwordText); 

} 

其實你是在OnClick方法使用ocUserName1,ocPassword1但你沒有初始化它們。在你創建的時候,你只給局部變量賦值,這就是爲什麼存在的原因。

+0

但我的應用程序強制關閉 – chy 2014-11-23 09:01:10

+0

您是否在fragment_omega XML中使用onclick屬性? – MathanG 2014-11-23 14:24:05