2017-10-19 4 views
0

In dieser Anwendung habe ich zwei activities eine für das Senden location des Benutzers und andere für die Anzeige einer listView wo jede Zeile einen Namen und eine Telefonnummer enthält. Die listView Einträge sind in einem sqlitedatabse gespeichert. Die activity die conatins die listView zeigen keinen Fehler, wenn Sie einen Namen und eine Telefonnummer, aber die activity Eingabe, die Taste conatins location zu den Zahlen in den sqlitedatabse zeigt einen FehlerSQLiteException: Keine solche Tabelle gefunden, während eine Tabelle erstellt wurde

android.database.sqlite.SQLiteException gespeichert zu senden: keine solche Tabelle: UserDataB (Code 1):, beim Kompilieren: SELECT * FROM UserDataB

wo UserDataB die table name ist. Ich habe dieses link ausgecheckt, weil der Fehler dem von mir ähnlich war, aber es half mir nicht, das Problem zu lösen. Der Code ist unten angegeben:

Userdatabase

Der Code für die activity, in dem location auf die Einträge in sqlitedatabse gegeben unten gesendet wird:

Aktivität

public class Gps4Activity extends AppCompatActivity implements 
     GoogleApiClient.OnConnectionFailedListener { 

    private static final String LOG_TAG = "PlacesAPIActivity"; 
    private static final int GOOGLE_API_CLIENT_ID = 0; 
    private GoogleApiClient mGoogleApiClient; 
    private static final int PERMISSION_REQUEST_CODE = 100; 
    private static final int MY_PERMISSIONS_REQUEST_SEND_SMS =0 ; 
    private TextView display; 
    private Button location_button,contacts_button; 
    //String number="xxxxxxxxxx"; 

    ArrayList<String> numbers; 
    SQLiteDatabase db; 

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

     numbers=new ArrayList<>(); 
     db=Gps4Activity.this.openOrCreateDatabase("User_Details",MODE_PRIVATE,null); 


     location_button=(Button)findViewById(R.id.show_button); 
     contacts_button=(Button)findViewById(R.id.view_button); 
     display=(TextView)findViewById(R.id.location_textview); 

     mGoogleApiClient = new GoogleApiClient.Builder(Gps4Activity.this) 
       .addApi(Places.PLACE_DETECTION_API) 
       .enableAutoManage(this, GOOGLE_API_CLIENT_ID, this) 
       .build(); 

     location_button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if (mGoogleApiClient.isConnected()) { 
        if (ActivityCompat.checkSelfPermission(Gps4Activity.this, 
          android.Manifest.permission.ACCESS_FINE_LOCATION) 
          != PackageManager.PERMISSION_GRANTED) { 
         ActivityCompat.requestPermissions(Gps4Activity.this, 
           new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, 
           PERMISSION_REQUEST_CODE); 
         ActivityCompat.requestPermissions(Gps4Activity.this, 
           new String[]{Manifest.permission.SEND_SMS}, 
           MY_PERMISSIONS_REQUEST_SEND_SMS); 
        } 
       } 
       callPlaceDetectionApi(); 
      } 
     }); 

     contacts_button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent=new Intent(Gps4Activity.this,DetailsActivity.class); 
       startActivity(intent); 
      } 
     }); 
    } 




    public ArrayList<String> getContacts(){ 

     Cursor cursor=db.rawQuery("SELECT * FROM "+UserDatabase.TABLE_NAME,null); 
     db.execSQL("create table " + UserDatabase.TABLE_NAME + "(" + UserDatabase._ID 
       + " INTEGER PRIMARY KEY AUTOINCREMENT, " + UserDatabase.NAME + " TEXT NOT NULL, " + 
       UserDatabase.NUMBER + " TEXT);"); 

     while (cursor.moveToNext()){ 
      String contact=cursor.getString(cursor.getColumnIndex(UserDatabase.NUMBER)); 
      numbers.add(contact); 
     } 
     return numbers; 
    } 




    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
     Log.e(LOG_TAG, "Google Places API connection failed with error code: " 
       + connectionResult.getErrorCode()); 

     Toast.makeText(this, 
       "Google Places API connection failed with error code:" + 
         connectionResult.getErrorCode(), 
       Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, 
              String permissions[], int[] grantResults) { 
     switch (requestCode) { 
      case PERMISSION_REQUEST_CODE: 
       if (grantResults.length > 0 
         && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        callPlaceDetectionApi(); 
       } else { 
        Toast.makeText(getApplicationContext(), 
          "SMS faild, please try again.", Toast.LENGTH_LONG).show(); 
        return; 
       } 
       break; 

     } 
    } 


    private void callPlaceDetectionApi() throws SecurityException { 
     PendingResult<PlaceLikelihoodBuffer> result = Places.PlaceDetectionApi 
       .getCurrentPlace(mGoogleApiClient, null); 
     result.setResultCallback(new ResultCallback<PlaceLikelihoodBuffer>() { 
      @Override 
      public void onResult(PlaceLikelihoodBuffer likelyPlaces) { 
       for (PlaceLikelihood placeLikelihood : likelyPlaces) { 
        Log.i(LOG_TAG, String.format("Place '%s' with " + 
            "likelihood: %g", 
          placeLikelihood.getPlace().getName(), 
          placeLikelihood.getLikelihood())); 
        display.setText(placeLikelihood.getPlace().getAddress().toString()); 
        messageSending(placeLikelihood.getPlace().getAddress().toString()); 
        break; 
       } 
       likelyPlaces.release(); 

      } 
     }); 
    } 

    public void messageSending(String message){ 
     SmsManager smsManager = SmsManager.getDefault(); 
//  smsManager.sendTextMessage(number, null, message, null, null); 
     getContacts(); 
     smsManager.sendTextMessage(String.valueOf(numbers),null,message,null,null); 
     Toast.makeText(getApplicationContext(), "SMS sent."+String.valueOf(numbers), 
       Toast.LENGTH_LONG).show(); 
    } 


} 

Antwort

1

Sie arbeiten mit zwei verschiedenen Datenbankdateien, User_Details und User_Details.DB.

Wenn Sie SQLiteOpenHelper für die Verwaltung Ihrer Datenbank verwenden, verwenden Sie sie konsistent. Ersetzen Sie beispielsweise

db=Gps4Activity.this.openOrCreateDatabase("User_Details",MODE_PRIVATE,null); 

mit so etwas wie

db = new UserDatabase(this).getReadableDatabase(); 

, um tatsächlich die Helfer zu verwenden für die Erstellung der Datenbank und Tabellen für Sie, und entfernen Sie den CREATE TABLE Code, der nicht in der Helfer ist.

+0

Vielen Dank, ich hatte nur noch ein Problem –

+0

Jetzt, da die Anwendung nicht abstürzt, wenn ich auf den 'location_button' klicke, würde das erwartete Verhalten sein, dass es' location' an den Eintrag in 'sqliitedatabase' sendet aber das passiert nicht, aber die 'toast'-Nachricht wird angezeigt' SMS gesendet. xxxxxxxx " –

Verwandte Themen