2013-05-21 3 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 и т. д.) в основном потоке. Если вы посмотрите дальше в своем логарифме (установите его подробным), вы, вероятно, найдете там что-то вроде NETWORK_ON_MAIN_THREAD_EXCEPTION.

Это похоже на то, что вы делаете. Это будет отлично работать на более низких уровнях API, потому что платформа не ограничивает его (хотя это все еще плохая идея)

Чтобы исправить ситуацию, вам нужно просто отключить сетевую операцию от основного потока. Рассмотрим использование AsyncTask

+0

Да, это AsyncTask работает для меня. Thnaks Mr.FoamyGuy ..: - DS) – DillGates

Смежные вопросы