2013-05-21 116 views
0

我必須做一個應用程序,應該在所有2.2 +版本工作。我已經在Android設備和模擬器中測試過。但是這個應用程序在幾個版本中工作,但不能在更高版本中工作,如果我啓動了我的應用程序iam獲得空值的錯誤。我不知道爲什麼會發生。根據我的假設「如果我們開發了適用於所有其他更高版本的更低版本的應用程序」,但這不起作用。請幫幫我。Android應用程序2.2版本,但不兼容2.2 +版本

這是我在2.2,2.3和更高版本中工作的代碼。但不能在3.2及更高版本中工作。我得到空值

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

    textbox1 = (TextView) findViewById(R.id.textinname1); 
    textbox2 = (TextView) findViewById(R.id.textinname2); 

    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo ni = cm.getActiveNetworkInfo(); 
    if (ni != null && ni.isConnected()) 
    { 
     msg = "Please login to continue"; 
     login(); 
    } 
    else 
    { 
     msg = "Sorry , network connection is not available."; 
     message(); 
    } 
} 

//Login------------------------------------------------------------------------------------ 
public void login() 
{ 
    final EditText uname = new EditText(this); 
    final EditText upassword = new EditText(this); 
    DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() 
    { 
     // DialogInterface called while setting the AlertDialog Buttons 
     public void onClick(DialogInterface dialog, int which) 
     { 
      //Here you can perform functions of Alert Dialog Buttons as shown 
      switch(which) 
      { 
       case DialogInterface.BUTTON_POSITIVE: 
        if(!uname.getText().toString().equals("") && !upassword.getText().toString().equals("")) 
        { 
         session_name = uname.getText().toString(); 
         session_pwd = upassword.getText().toString(); 
         try 
         { 
          uid = httppost(uname.getText().toString(), upassword.getText().toString(), "login.php"); //Here Iam getting null value. 
          Log.i("TAG", ""+uid); 
         } 
         catch(JSONException e) 
         { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 

         if(uid == null || uid.length() == 6) 
         { 
          msg = "Either user name or password or both incorrect."; 
          login(); 
         } 
         else 
         { 
          Toast.makeText(getApplicationContext(), "Hello " + uname.getText().toString() + ", You have successfully logged in..:)", Toast.LENGTH_LONG).show(); 
          IDList() 
         } 
        } 
        else 
        { 
         Toast.makeText(getApplicationContext(), "Sorry, Either user name or password or both incorrect..:(", Toast.LENGTH_LONG).show(); 
         msg = "Both user name and password are mandatory fields."; 
         login(); 
        } 
       break; 

       case DialogInterface.BUTTON_NEGATIVE: 
        exit(); 
       break; 
      } 
     } 
    }; 

    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    LinearLayout orientation = new LinearLayout(this); 
    orientation.setOrientation(1); //1 is for vertical orientation 
    uname.setHint("Enter name"); 
    upassword.setHint("Enter password"); 
    upassword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); 
    orientation.addView(uname); 
    orientation.addView(upassword); 
    builder.setView(orientation); 
    builder.setMessage(msg); 
    builder.setTitle("Login") 
    .setIcon(R.drawable.ic_launcher) 
    .setPositiveButton("Submit", dialogClickListener) 
    .setNegativeButton("Exit App", dialogClickListener).show(); 
} 

public String httppost(String param1, String param2, String file) throws JSONException 
{ 
    try 
    { 
     String data = URLEncoder.encode("param1", "UTF-8") + "=" + URLEncoder.encode(param1, "UTF-8"); 
     data += "&" + URLEncoder.encode("param2", "UTF-8") + "=" + URLEncoder.encode(param2, "UTF-8"); 

     // Send data 
     URL url = new URL("http://192.168.1.12/GeoTracker/android/"+file); 
     URLConnection conn = url.openConnection(); 
     conn.setDoOutput(true); 
     OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
     wr.write(data); 
     wr.flush(); 

     // Get the response 
     BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
     the_string_response = rd.readLine(); 
     wr.close(); 
     rd.close(); 
    } 
    catch (Exception e) 
    { 
    } 
    textbox1.setText(""); 
    textbox2.setText(""); 

    return the_string_response; 
} 

這是我的日誌貓,

`05-21 19:12:50.610: D/dalvikvm(4100): Late-enabling CheckJNI 

05-21 19:12:50.850: E/PhonePolicy(4100): Could not preload class for phone policy: com.android.internal.policy.impl.PhoneWindow$ContextMenuCallback 

05-21 19:12:50.970: D/TextLayoutCache(4100): Using debug level: 0 - Debug Enabled: 0 

05-21 19:12:51.160: I/dalvikvm(4100): threadid=1: recursive native library load attempt (/system/lib/libwebcore.so) 

05-21 19:12:51.160: D/dalvikvm(4100): No JNI_OnLoad found in /system/lib/libchromium_net.so 0x0, skipping init 

05-21 19:12:51.220: D/dalvikvm(4100): GC_CONCURRENT freed 134K, 4% free 5078K/5255K, paused 1ms+1ms 

05-21 19:12:51.750: D/libEGL(4100): loaded /system/lib/egl/libEGL_mali.so 

05-21 19:12:51.760: D/libEGL(4100): loaded /system/lib/egl/libGLESv1_CM_mali.so 

05-21 19:12:51.770: D/libEGL(4100): loaded /system/lib/egl/libGLESv2_mali.so 

05-21 19:12:51.820: D/OpenGLRenderer(4100): Enabling debug mode 0 

05-21 19:12:59.690: D/dalvikvm(4100): GC_CONCURRENT freed 159K, 5% free 5329K/5575K, 
paused 2ms+4ms` 

05-21 19:13:11.500: I/TAG(4100): null 

請幫助我,提前 謝謝...

回答

5

在具有足夠高的API級別的設備系統會阻止您在主線程中執行網絡操作(http post等)。如果你在你的logcat中進一步查找(設置爲詳細),那麼你可能會在那裏找到類似NETWORK_ON_MAIN_THREAD_EXCEPTION的東西。

看起來這正是你在做什麼。這可以在較低的API級別上正常工作,因爲平臺沒有限制它(儘管它仍然是一個壞主意)

要解決您只需將網絡操作從主線程移出即可。考慮使用AsyncTask

+0

是的,AsyncTask正在爲我工​​作。 ThnaksFoamyGuy先生: - DS) – DillGates