2014-02-16 5 views
-1

Мой код хорошо работает на эмуляторе, но не на устройстве. Ошибка в запросе такого метода.Почему мой код не работает на устройстве, но работает на эмуляторе?

package testing.login; 

import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

public class DBHelper extends SQLiteOpenHelper { 

    public DBHelper(Context context) { 
     //Create database 
     super(context, "MyDatabase.db", null, 1); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     //Create tables 
     db.execSQL("CREATE TABLE ANDRO(ID INTEGER,NAME TEXT,ADDRESS TEXT);"); 
     db.execSQL("CREATE TABLE QUESTIONS(ID INTEGER,QUESTION TEXT,OPTION_A      TEXT,OPTION_B TEXT,OPTION_C TEXT,OPTION_D TEXT,ANSWER TEXT);"); 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) { 
     //Delete tables 
     db.execSQL("drop table if exists ANDRO"); 
     db.execSQL("drop table if exists QUESTION"); 
    } 

} 

package testing.login; 

import android.os.Bundle; 
import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.content.Intent; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.view.Menu; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.Toast; 

@SuppressLint("NewApi") 
public class MainActivity extends Activity { 

    //Declaring Variables 
    SQLiteDatabase db; 
    EditText name, address; 
    String sname, saddress; 
    boolean namenotequal = true; 
    DBHelper dbHelper; 
    DatabaseBean dbb; 
    boolean upwrong = true; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     dbHelper = new DBHelper(getBaseContext()); //Accesing Database helper class 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    //On click function of sign up button 
    public void signup(View view) { 
     dbHelper.close(); 
     //Intent used to access sign up class 
     Intent intent = new Intent(this, Signup.class); 
     //  intent.putExtra("sachithkn", dbHelper); 
     startActivity(intent); 
    } 

    @Override 
    public void onBackPressed() {} 

    //On click function of sign in button 
    @SuppressLint("ShowToast") 
    public void signin(View view) { 

     //Reading values from text fields 
     name = (EditText) findViewById(R.id.editText1); 
     address = (EditText) findViewById(R.id.editText2); 
     sname = name.getText().toString(); 
     saddress = address.getText().toString(); 

     //Encrypting password using md5 
     saddress = Signup.md5(saddress); 
     String[] values = new String[] { 
      "ID", 
       "NAME", 
       "ADDRESS" 
     }; 

     db = dbHelper.getReadableDatabase(); //Opening database 
     if (sname.equals("") || saddress.equals("")) //Checking whether text fields are empty or not 
      Toast.makeText(getApplicationContext(), "Field cannot be empty", 2000).show(); 
     else { 
      //Reading values from database 
      Cursor cursor = db.query(false, "ANDRO", values, null, null, null, null, null, null, null); 
      if (cursor.moveToFirst()) { 
       do { 
        String dbname = cursor.getString(1); 
        String dbaddress = cursor.getString(2); 

        if (dbname.equals(sname) && dbaddress.equals(saddress)) //Checking whether values are in database or not 
        { 
         upwrong = false; //Variable set to run toast correctly 
         Toast.makeText(getApplicationContext(), "You have successfully logedin", 2000).show(); 
         dbHelper.close(); 
         Intent intent2 = new Intent(this, Questions.class); //Accesing questions activity 
         intent2.putExtra("passname", dbname); 
         startActivity(intent2); 
        } 
       } while (cursor.moveToNext()); 
       if (upwrong) //Variable set to run toast correctly   
       { 
        //Toast set to show when password or user name is wrong 
        Toast.makeText(getApplicationContext(), "Wrong username or password ,Try again", 2000).show(); 
        setContentView(R.layout.activity_main); 
       } 
      } 
     } 
    } 
} 

Вот ошибка:

02-16 12:34:44.804: W/dalvikvm(26832): VFY: unable to resolve virtual method 255: Landroid/database/sqlite/SQLiteDatabase;.query (ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor; 
02-16 12:34:44.804: D/dalvikvm(26832): VFY: replacing opcode 0x74 at 0x007f 
02-16 12:34:44.804: D/dalvikvm(26832): VFY: dead code 0x0082-00e8 in Ltesting/login/MainActivity;.signin (Landroid/view/View;)V 
02-16 12:34:47.929: W/dalvikvm(26832): VFY: unable to resolve virtual method 255: Landroid/database/sqlite/SQLiteDatabase;.query (ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor; 
02-16 12:34:47.929: D/dalvikvm(26832): VFY: replacing opcode 0x74 at 0x0077 
02-16 12:34:47.929: D/dalvikvm(26832): VFY: dead code 0x007a-00ec in Ltesting/login/Signup;.signup (Landroid/view/View;)V 
02-16 12:34:57.148: D/AndroidRuntime(26832): Shutting down VM 
02-16 12:34:57.148: W/dalvikvm(26832): threadid=1: thread exiting with uncaught exception (group=0x40018578) 
02-16 12:34:57.195: E/AndroidRuntime(26832): FATAL EXCEPTION: main 
02-16 12:34:57.195: E/AndroidRuntime(26832): java.lang.IllegalStateException: Could not execute method of the activity 
02-16 12:34:57.195: E/AndroidRuntime(26832): at android.view.View$1.onClick(View.java:2144) 
02-16 12:34:57.195: E/AndroidRuntime(26832): at android.view.View.performClick(View.java:2485) 
02-16 12:34:57.195: E/AndroidRuntime(26832): at android.view.View$PerformClick.run(View.java:9080) 
02-16 12:34:57.195: E/AndroidRuntime(26832): at android.os.Handler.handleCallback(Handler.java:587) 
02-16 12:34:57.195: E/AndroidRuntime(26832): at android.os.Handler.dispatchMessage(Handler.java:92) 
02-16 12:34:57.195: E/AndroidRuntime(26832): at android.os.Looper.loop(Looper.java:130) 
02-16 12:34:57.195: E/AndroidRuntime(26832): at android.app.ActivityThread.main(ActivityThread.java:3687) 
02-16 12:34:57.195: E/AndroidRuntime(26832): at java.lang.reflect.Method.invokeNative(Native Method) 
02-16 12:34:57.195: E/AndroidRuntime(26832): at java.lang.reflect.Method.invoke(Method.java:507) 
02-16 12:34:57.195: E/AndroidRuntime(26832): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
02-16 12:34:57.195: E/AndroidRuntime(26832): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
02-16 12:34:57.195: E/AndroidRuntime(26832): at dalvik.system.NativeStart.main(Native Method) 
02-16 12:34:57.195: E/AndroidRuntime(26832): Caused by: java.lang.reflect.InvocationTargetException 
02-16 12:34:57.195: E/AndroidRuntime(26832): at java.lang.reflect.Method.invokeNative(Native Method) 
02-16 12:34:57.195: E/AndroidRuntime(26832): at java.lang.reflect.Method.invoke(Method.java:507) 
02-16 12:34:57.195: E/AndroidRuntime(26832): at android.view.View$1.onClick(View.java:2139) 
02-16 12:34:57.195: E/AndroidRuntime(26832): ... 11 more 
02-16 12:34:57.195: E/AndroidRuntime(26832): Caused by: java.lang.NoSuchMethodError: android.database.sqlite.SQLiteDatabase.query 
02-16 12:34:57.195: E/AndroidRuntime(26832): at testing.login.MainActivity.signin(MainActivity.java:77) 
02-16 12:34:57.195: E/AndroidRuntime(26832): ... 14 more 
+2

ты кричишь? * (Изменить: я исправил его для вас) * –

+0

В следующий раз, пожалуйста, сделайте попытку форматировать свой код с готовностью, вместо того, чтобы иметь [отступы] (http://stackoverflow.com/revisions/21808611/1) который был там, прежде чем я очистил его для вас. –

+0

Является ли это db.execSQL («СОЗДАТЬ ТАБЛИЦЫ ВОПРОСОВ (ID INTEGER, ВОПРОС-ТЕКСТ, OPTION_A (** неполный sql и открытая строка **) ваш ** настоящий код **? Ожидаете ли вы его компилировать? –

ответ

0

Короче говоря, вы код работает версию API, который не поддерживается эмулятором.

ваш запрос supported from API 16, попробуйте использовать другой метод запроса

+0

Благодарю вас, я решаю его, изменив запрос на необработанный запрос. Эта ошибка отображается в android 4.0.3 also.I Не знаете, почему? – sachithkn

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