Half implementation of SQL Query

Need to finish it.
This commit is contained in:
Przemek Grondek 2014-09-30 15:41:43 +02:00
parent 7b5e2ddd6d
commit 6c842541c3
15 changed files with 211 additions and 3 deletions

View file

@ -34,6 +34,10 @@
android:name=".ElementActivity"
android:label="@string/title_activity_element" >
</activity>
<activity
android:name=".SQLActivity"
android:label="@string/title_activity_sql">
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET" />

View file

@ -33,7 +33,7 @@ public class ListActivity extends Activity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
getMenuInflater().inflate(R.menu.logged, menu);
return true;
}
@ -47,6 +47,8 @@ public class ListActivity extends Activity {
if (id == R.id.action_settings) {
Static.startSettings(this);
return true;
} else if (id == R.id.action_sql){
Static.startSQL(this);
}
return super.onOptionsItemSelected(item);
}

View file

@ -0,0 +1,22 @@
package info.nerull7.mysqlbrowser;
import android.app.Activity;
import android.os.Bundle;
/**
* Created by nerull7 on 30.09.14.
*/
public class SQLActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sql);
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.container, new SQLFragment())
.commit();
}
}
}

View file

@ -0,0 +1,72 @@
package info.nerull7.mysqlbrowser;
import android.app.Activity;
import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
/**
* Created by nerull7 on 30.09.14.
*/
public class SQLFragment extends Fragment{
private EditText sqlEditText;
private InputMethodManager inputMethodManager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_sql, container, false);
sqlEditText = (EditText) rootView.findViewById(R.id.sqlQueryText);
setHasOptionsMenu(true);
return rootView;
}
@Override
public void onStart() {
super.onStart();
inputMethodManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.showSoftInput(sqlEditText, InputMethodManager.SHOW_FORCED);
sqlEditText.requestFocus();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.action_execute:
actionExecute();
break;
case R.id.action_cancel:
actionCancel();
break;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.sql, menu);
super.onCreateOptionsMenu(menu, inflater);
}
private void actionCancel(){
inputMethodManager.hideSoftInputFromWindow(sqlEditText.getWindowToken(), 0);
getActivity().finish();
}
private void actionExecute(){
String sqlQuery = String.valueOf(sqlEditText.getText());
Log.d("SQLQUERY", sqlQuery);
Static.asyncDatabaseConnector.setOnPostExecuteListener(null);
Static.asyncDatabaseConnector.executeSQL(null /*FIXME*/, sqlQuery);
}
}

View file

@ -51,4 +51,9 @@ public class Static {
builder.create();
builder.show();
}
public static void startSQL(Context context) {
Intent intent = new Intent(context, SQLActivity.class);
context.startActivity(intent);
}
}

View file

@ -2,6 +2,7 @@ package info.nerull7.mysqlbrowser.db;
import android.content.res.Resources;
import android.os.AsyncTask;
import android.util.Log;
import org.json.JSONArray;
import org.json.JSONException;
@ -37,6 +38,7 @@ public class AsyncDatabaseConnector {
public static final String ACTION_ADD_ELEMENT = "addelement";
public static final String ACTION_UPDATE_ELEMENT = "updateelement";
public static final String ACTION_REMOVE_ELEMENT = "removeelement";
public static final String ACTION_SQL_QUERY = "query";
private String login;
private String password;
@ -339,6 +341,44 @@ public class AsyncDatabaseConnector {
downloader.execute(request);
}
public void executeSQL(String database, String query){
ArrayList<String> args = new ArrayList();
ArrayList<String> values = new ArrayList();
final Request request;
if(database!=null){
args.add("d");
values.add(database);
}
args.add("q");
values.add(query);
request = actionUrlBuilder(ACTION_SQL_QUERY, args, values);
Downloader downloader = new Downloader(new Downloader.OnFinishedListener() {
@Override
public void onFinished(String data, String error) {
String []response = data.split("\n");
List<String>headerList = null;
try {
headerList = parseListFromJSON(response[1]);
} catch (JSONException e) { e.printStackTrace(); }
if(listReturnListener!=null) {
listReturnListener.onListReturn(headerList);
}
List<List<String>> dataMatrix = null;
try {
dataMatrix = parseMatrixFromJSON(response[2]);
} catch (JSONException e) { e.printStackTrace(); }
if(matrixReturnListener!=null)
matrixReturnListener.onMatrixReturn(dataMatrix);
}
}, onPostExecuteListener, resources);
downloader.execute(request);
}
public void setBooleanReturnListener(BooleanReturnListener booleanReturnListener){
this.booleanReturnListener = booleanReturnListener;
}
@ -468,14 +508,14 @@ public class AsyncDatabaseConnector {
reader = new BufferedReader(new InputStreamReader(in));
String line;
while ((line = reader.readLine()) != null) {
streamOutput += line;
streamOutput += line + '\n';
}
} finally {
if (reader != null) {
reader.close();
}
}
return streamOutput;
return streamOutput.substring(0, streamOutput.length()-1); // Remove last \n
}
@Override

Binary file not shown.

After

(image error) Size: 380 B

Binary file not shown.

After

(image error) Size: 271 B

Binary file not shown.

After

(image error) Size: 466 B

Binary file not shown.

After

(image error) Size: 832 B

View file

@ -0,0 +1,7 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="info.nerull7.mysqlbrowser.ListActivity"
tools:ignore="MergeRootFrame" />

View file

@ -0,0 +1,24 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="info.nerull7.mysqlbrowser.DatabaseFragment">
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textMultiLine"
android:ems="10"
android:id="@+id/sqlQueryText"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:gravity="left|top"
android:hint="@string/hint_sql_query" >
<requestFocus/>
</EditText>
</RelativeLayout>

View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/action_settings"
android:title="@string/action_settings"
android:orderInCategory="100"
android:showAsAction="never" />
<item android:id="@+id/action_sql"
android:title="@string/sql_query"
android:orderInCategory="200"
android:showAsAction="never" />
</menu>

View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/action_execute"
android:title="@string/action_execute"
android:showAsAction="always"
android:icon="@drawable/ic_action_file_upload"/>
<item android:id="@+id/action_cancel"
android:title="@string/action_cancel"
android:showAsAction="always"
android:icon="@drawable/ic_action_delete"/>
</menu>

View file

@ -53,5 +53,10 @@
<string name="save_credentials">Save credentials</string>
<string name="connector_url">Connector URL</string>
<string name="no_connection">No Internet Connection</string>
<string name="sql_query">SQL Query</string>
<string name="title_activity_sql">SQL Query</string>
<string name="hint_sql_query">SQL Query</string>
<string name="action_cancel">Cancel</string>
<string name="action_execute">Execute</string>
</resources>