2013-05-21 211 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