04 Nov 2016
SRS – Android Client Code Part 4
Posted in Android, Java Programming By Code Guru On November 4, 2016SRS – Server Side Code Part 1
SRS – Server Side Code Part 2
SRS – Server Side Code Part 3
SRS – Android Client Code Part 4
SRS – Adroind Code which handles files on clients side, provides GUI interface and connectivity with server on a specific ip and port.
Question Activity on Android Client
package com.activeSRS.client; import java.net.Socket; import com.example.quizapp.R; import android.annotation.SuppressLint; import android.app.Activity; import android.app.Fragment; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.CheckBox; import android.widget.Chronometer; import android.widget.LinearLayout; import android.widget.TextView; /** * * @author Gulraiz * */ public class QuestionActivity extends Activity { TextView s1; Socket socket = null; CheckBox[] box = null; LinearLayout layout; String[] data = null; Chronometer focus; @SuppressLint("NewApi") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_question); focus = (Chronometer) findViewById(R.id.chronometer1); focus.start(); // Get the message from the intent Intent intent = getIntent(); String message = intent.getStringExtra(MyClient.EXTRA_MESSAGE); s1 = new TextView(this); s1.setTextSize(12); layout = (LinearLayout) findViewById(R.id.container); layout.setOrientation(LinearLayout.VERTICAL); layout.addView(s1); data = message.split(":"); TextView question = new TextView(this); question.setTextSize(15); question.setTextColor(Color.BLUE); layout.addView(question); question.setText("Qusestion : \n" + data[0] + "?"); box = new CheckBox[data.length - 1]; for (int i = 1; i < data.length; i++) { box[i - 1] = new CheckBox(this); box[i - 1].setText(data[i]); box[i - 1].setOnClickListener(new CheckBoxListener(this)); layout.addView(box[i - 1]); } Button send = new Button(this); send.setText("Send"); layout.addView(send); setContentView(layout); send.setOnClickListener(new MyListener(this)); // send.setOnClickListener(myBtn); } public void onCheckboxClicked(View view) { System.out.println("clickable" + view.isClickable()); } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } /** * A placeholder fragment containing a simple view. */ @SuppressLint("NewApi") public static class PlaceholderFragment extends Fragment { public PlaceholderFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.activity_question, container, false); return rootView; } } }
package com.activeSRS.client; import android.app.Activity; import android.view.View; import android.view.View.OnClickListener; import android.widget.CheckBox; /** * * @author Gulraiz * */ public class CheckBoxListener implements OnClickListener { Activity activity; public CheckBoxListener(Activity activity) { this.activity = activity; } @Override public void onClick(View v) { CheckBox box = (CheckBox) v; QuestionActivity ac = (QuestionActivity) this.activity; for (int i = 0; i < ac.box.length; i++) ac.box[i].setChecked(false); box.setChecked(true); } }
File Handler Class
package com.activeSRS.client; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import android.app.Activity; import android.content.Context; import android.util.Log; /** * * @author Gulraiz * */ public class FileHandler { Activity myactivity; public FileHandler(Activity activity) { this.myactivity = activity; } public String readFile() { String FILENAME = "test"; File myDir = this.myactivity.getFilesDir(); // File file = new File(myDir + "/text/", FILENAME); Log.i("File Reader ", "----->" + myDir.getAbsolutePath()); String temp = ""; // if (file.exists()) { try { InputStream fio = this.myactivity.openFileInput(FILENAME); int c; while ((c = fio.read()) != -1) temp = temp + Character.toString((char) c); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // } return temp; } protected void writeFile(String info) { String FILENAME = "test"; File myDir = this.myactivity.getFilesDir(); File secondFile = new File(myDir + "/text/", FILENAME); try { if (secondFile.getParentFile().mkdirs()) secondFile.createNewFile(); FileOutputStream fos = this.myactivity.openFileOutput(FILENAME, Context.MODE_PRIVATE); fos.write(info.getBytes()); fos.close(); Log.i("File Writer ", "----->" + secondFile.getAbsolutePath()); Log.i("User Data ", "----->" + info); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
MyClient GUI class
package com.activeSRS.client; import com.example.quizapp.R; import android.annotation.SuppressLint; import android.app.Activity; import android.os.Bundle; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.TextView; /** * * @author Gulraiz * */ @SuppressLint("NewApi") public class MyClient extends Activity { EditText textport; EditText textip; TextView textIn; TextView status; EditText sid; EditText name; CheckBox choice1; CheckBox choice2; CheckBox choice3; CheckBox choice4; public final static String EXTRA_MESSAGE = "com.example.quizapp.MESSAGE"; String file_str = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textport = (EditText) findViewById(R.id.txtport); textip = (EditText) findViewById(R.id.txtip); Button buttonSend = (Button) findViewById(R.id.btnSubmit); status = (TextView) findViewById(R.id.status); textIn = (TextView) findViewById(R.id.textin); sid = (EditText) findViewById(R.id.sid); name = (EditText) findViewById(R.id.name); // Get data from stored file in cache String data = (String) new FileHandler(this).readFile(); if (!data.isEmpty()) { String str[] = data.split(":"); textport.setText(str[1]); textip.setText(str[0]); sid.setText(str[2]); name.setText(str[3]); } else { textport.setText("PORT"); textip.setText("IP"); sid.setText("SID"); name.setText("Student Name"); } buttonSend.setOnClickListener(new MyListener(this)); } }
Activity Listener Class
package com.activeSRS.client; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; import com.example.quizapp.R; import android.annotation.SuppressLint; import android.app.Activity; import android.app.AlertDialog; import android.content.Intent; import android.graphics.Color; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; /** * * @author Gulraiz * */ public class MyListener implements OnClickListener { // data from my activity String IP; String MSG; int PORT; String line; String file_str; String output; protected Activity activity; public MyListener(Activity activity) { // if(activity instanceof MyClient){ this.activity = activity; } // Question activity 1. Read file and get connectivity data // 2. record answer on server public MyListener(Activity activity, String output) { this.activity = activity; this.output = output; } @Override public void onClick(View v) { if (activity instanceof MyClient) { try { new Thread() { @Override public void run() { try { MyClient client = (MyClient) activity; PORT = Integer.parseInt(client.textport.getText().toString()); IP = client.textip.getText().toString(); int sid = Integer.parseInt(client.sid.getText().toString()); String sname = client.name.getText().toString(); file_str = IP + ":" + PORT + ":" + sid + ":" + sname; new FileHandler(client).writeFile(file_str); // Create Socket instance Socket socket = new Socket(client.textip.getText().toString(), PORT); // Get input buffer BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); line = br.readLine(); br.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } InputHandler.sendEmptyMessage(0); } }.start(); } catch (Exception e) { e.printStackTrace(); } } // Handle Question activity from here onward else if (activity instanceof QuestionActivity) { try { new Thread() { @Override public void run() { try { QuestionActivity client = (QuestionActivity) activity; String data[] = (new FileHandler(activity)).readFile().split(":"); String answer = ""; boolean isChecked = false; for (int i = 0; i < client.box.length; i++) { if (client.box[i].isChecked()) { answer = client.box[i].getText().toString(); isChecked = true; } } if (isChecked) { client.focus.stop(); String time[] = client.focus.getText().toString().split(":"); int timespent = (Integer.parseInt(time[0]) * 60) + Integer.parseInt(time[1]); Log.i("Time spent ", "----->" + timespent); // 0: SID, 1:name, 2:time stamp, 3: answer String result = data[2] + ":" + data[3] + ":" + timespent + ":" + answer; // Create Socket instance Socket socket = new Socket(data[0], Integer.parseInt(data[1])); PrintWriter output = new PrintWriter(socket.getOutputStream(), true); output.println(result); output.close(); Log.i("Response ", "----->" + result); Intent intent = new Intent(activity, Thanks.class); // intent.putExtra(client.EXTRA_MESSAGE, // result); activity.startActivity(intent); } else { // client.s1.setText("Select answer...!!!"); } } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // InputHandler.sendEmptyMessage(0); } }.start(); } catch (Exception e) { e.printStackTrace(); } } } // Define Handler object @SuppressLint("HandlerLeak") private Handler InputHandler = new Handler() { @Override // When there is message, execute this method public void handleMessage(Message msg) { super.handleMessage(msg); // Update UI MyClient obj = (MyClient) activity; obj.status.setText("connected"); Intent intent = new Intent(activity, QuestionActivity.class); intent.putExtra(obj.EXTRA_MESSAGE, line); activity.startActivity(intent); Log.i("Line ", "----->" + line); } }; }