Note that there are some explanatory texts on larger screens.

plurals
  1. POHow do I call set changes in a "Custom View" by calling a function from a button.?
    primarykey
    data
    text
    <p>I have created a Custom View component and my layout file consists of a button and the CustomView.Whenever I press the button,I want to update the <strong>Filename</strong> in the CustomView class.This occurs by invoking the set_file method of the <strong>customview</strong> and the <strong>set_file</strong> method is called in the function <strong>perform();</strong>.However I get an error while doing so.</p> <p>HERE are my 3 classes.</p> <p><strong><code>TestActivity.java</code></strong></p> <p>package com.android.pack;</p> <p>import java.net.URISyntaxException;</p> <pre><code>import android.app.Activity; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.widget.Button; import android.widget.LinearLayout; import android.widget.Toast; public class TestActivity extends Activity { /** Called when the activity is first created. */ int height; int weight; Button select; customview cView; String path=""; String pathchk=""; String temp=""; private static final int FILE_SELECT_CODE = 0; public void perform() { cView.set_file(pathchk); cView.postInvalidate(); } public void showFileChooser(View v) { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("*/*"); intent.addCategory(Intent.CATEGORY_OPENABLE); try { startActivityForResult( Intent.createChooser(intent, "Select a File to Upload"), FILE_SELECT_CODE); } catch (android.content.ActivityNotFoundException ex) { // Potentially direct the user to the Market with a Dialog Toast.makeText(this, "Please install a File Manager.", Toast.LENGTH_SHORT).show(); } } protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case FILE_SELECT_CODE: if (resultCode == RESULT_OK) { // Get the Uri of the selected file Uri uri = data.getData(); Log.v("check", "File Uri: " + uri.toString()); // Get the path try { path = FileUtils.getPath(this, uri); pathchk=path.substring(12); perform(); } catch (URISyntaxException e) { // TODO Auto-generated catch block Log.v("error", "File Path: "+pathchk); } Log.v("check", "File Path: "+path); // Get the file instance // File file = new File(path); // Initiate the upload } break; } super.onActivityResult(requestCode, resultCode, data); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LayoutInflater li = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); View v=li.inflate(R.layout.main, null); cView = (customview)findViewById(R.id.customview1); LinearLayout ll = new LinearLayout(this); ll.setOrientation(LinearLayout.VERTICAL); select=(Button)findViewById(R.id.button1); // select.setText("Select a File"); /* select.setOnClickListener(new Button.OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub showFileChooser(); Toast.makeText(getApplicationContext(), "The File "+path+" is loaded",Toast.LENGTH_LONG); } }); */ // LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams( // LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); //ll.addView(select, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); //ll.addView(cView, layoutParams); setContentView(R.layout.main); } } </code></pre> <p><strong>customview.java</strong></p> <pre><code>package com.android.pack; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileReader; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.StringTokenizer; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.gesture.Gesture; import android.gesture.GesturePoint; import android.gesture.GestureStroke; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.Point; import android.os.Environment; import android.util.AttributeSet; import android.util.Log; import android.view.View; import android.view.View.* ; import android.widget.Button; import android.widget.Toast; public class customview extends View implements OnClickListener { ArrayList&lt;GesturePoint&gt; child; ArrayList&lt;Point&gt; pnts; Point pnt=new Point(); File myFile; BufferedReader br; FileInputStream in; InputStreamReader fin; GestureStroke gest; Gesture my_final=new Gesture(); String Token; long Time=30000000; int flag=0; boolean line=true; boolean points=true; Button b1; int height; int weight; String Filename=""; ArrayList&lt;Path&gt; paths; Path mypath; Paint mypaint=new Paint();// public void set_file(String a)// to set the File { Filename=a; //clear_screen(); } public customview(Context context) { super(context); this.setOnClickListener(this); mypaint.setColor(Color.RED); mypaint.setAntiAlias(true); mypaint.setStyle(Paint.Style.STROKE); mypaint.setStrokeWidth(5); myFile=Environment.getExternalStorageDirectory(); } public customview(Context context,AttributeSet att) { super(context,att); this.setOnClickListener(this); mypaint.setColor(Color.RED); mypaint.setAntiAlias(true); mypaint.setStyle(Paint.Style.STROKE); mypaint.setStrokeWidth(5); myFile=Environment.getExternalStorageDirectory(); } public void make_shape() { paths=new ArrayList&lt;Path&gt;(); pnts=new ArrayList&lt;Point&gt;(); height=this.getHeight(); weight=this.getWidth(); Log.v("Main_custom_height",height+""); Log.v("Main_custom_weight",weight+""); try { File file = new File(myFile,Filename); br=new BufferedReader(new FileReader(file)); String read; while((read=br.readLine())!=null) { //Toast.makeText(Create_pathActivity.this,read,Toast.LENGTH_SHORT).show(); if(read.equals(".PEN_UP")) { flag=0; gest=new GestureStroke(child); mypath=gest.getPath(); paths.add(mypath); my_final.addStroke(gest); } if(flag==1) { StringTokenizer st = new StringTokenizer(read); for(int i=0;i&lt;=2;i++) { if(i==0) { Token=st.nextToken(); pnt.x=Integer.parseInt(Token); //pnt.x=pnt.x+200; //pnt.x=pnt.x/5; Log.v("PointX",Token); } if(i==1) { Token=st.nextToken(); pnt.y=Integer.parseInt(Token); //pnt.y=pnt.y+165; //pnt.y=pnt.y/5; Log.v("PointY",Token); } if(i==2) { Time=Time+10; GesturePoint temp=new GesturePoint(pnt.x,pnt.y,Time); child.add(temp); } } Point p=new Point(); p.x=pnt.x; p.y=pnt.y; pnts.add(p); } if(read.equals(".PEN_DOWN")) { flag=1; child=new ArrayList&lt;GesturePoint&gt;(); } } }catch (Exception e) { } } protected void onDraw(Canvas canvas) { if(points==true &amp;&amp; line==false) { for (Point point : pnts) { canvas.drawCircle(point.x, point.y, 3,mypaint); } } if(points==false &amp;&amp; line==true) { for( int i=0;i&lt;paths.size();i++) { canvas.drawPath(paths.get(i), mypaint); } } } public void scale() { int S_width = 320, S_height = 410, width, height, DiffW, DiffH; int max_x = 0, max_y = 0, min_x = 320, min_y = 410; int new_x, new_y; int i; float scale; for(i=0; i&lt;pnts.size(); i++) { if( pnts.get(i).x &gt; max_x ) max_x = pnts.get(i).x; if( pnts.get(i).x &lt; min_x ) min_x = pnts.get(i).x; if( pnts.get(i).y &gt; max_y ) max_y = pnts.get(i).y; if( pnts.get(i).y &lt; min_y ) min_y = pnts.get(i).y; } width = max_x - min_x; height = max_y - min_y; DiffW = Math.abs(S_width - width); DiffH = Math.abs(S_height - height); if( DiffW &gt; DiffH ) scale = width/300; else scale = height/390; //scaling for(i=0; i&lt;pnts.size(); i++) { pnts.get(i).x /= scale; pnts.get(i).y /= scale; } new_x = max_x - 10; new_y = min_y - 10; //top-left shifting for(i=0; i&lt;pnts.size(); i++) { pnts.get(i).x -= new_x; pnts.get(i).y -= new_y; } } @Override public void onClick(View v) { // TODO Auto-generated method stub if(Filename.equals("")) { Toast.makeText(getContext(),"Select a file ist", Toast.LENGTH_SHORT); return; } make_shape(); AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); builder.setCancelable(true); builder.setTitle("Draw a line or a path"); builder.setInverseBackgroundForced(true); builder.setPositiveButton("Line", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { line=true; points=false; invalidate(); } }); builder.setNegativeButton("Point", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { line=false; points=true; //scale(); invalidate(); } }); AlertDialog alert = builder.create(); alert.show(); } } **FileUtils.java** package com.android.pack; import java.net.URISyntaxException; import android.content.Context; import android.database.Cursor; import android.net.Uri; public class FileUtils { public static String getPath(Context context, Uri uri) throws URISyntaxException { if ("content".equalsIgnoreCase(uri.getScheme())) { String[] projection = { "_data" }; Cursor cursor = null; try { cursor = context.getContentResolver().query(uri, projection, null, null, null); int column_index = cursor .getColumnIndexOrThrow("_data"); if (cursor.moveToFirst()) { return cursor.getString(column_index); } } catch (Exception e) { // Eat it } } else if ("file".equalsIgnoreCase(uri.getScheme())) { return uri.getPath(); } return null; } } </code></pre> <p>and here is my <strong>main.xml</strong> file</p> <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" &gt; &lt;com.android.pack.customview android:id="@+id/customview1" android:layout_width="wrap_content" android:layout_height="419dp" android:layout_weight="0.63" /&gt; &lt;Button android:id="@+id/button1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="select a file" android:onClick="showFileChooser"/&gt; &lt;/LinearLayout&gt; </code></pre> <p>My log cat is </p> <pre><code>01-09 12:04:42.038: D/szipinf(4990): Initializing inflate state 01-09 12:04:42.248: D/dalvikvm(4990): GC_CONCURRENT freed 281K, 50% free 2860K/5639K, external 0K/0K, paused 4ms+8ms 01-09 12:04:48.668: V/check(4990): File Uri: content://org.openintents.cmfilemanager/mimetype//mnt/sdcard/points.txt 01-09 12:04:48.698: D/AndroidRuntime(4990): Shutting down VM 01-09 12:04:48.698: W/dalvikvm(4990): threadid=1: thread exiting with uncaught exception (group=0x40018560) 01-09 12:04:48.698: E/AndroidRuntime(4990): FATAL EXCEPTION: main 01-09 12:04:48.698: E/AndroidRuntime(4990): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { act=android.intent.action.VIEW dat=content://org.openintents.cmfilemanager/mimetype//mnt/sdcard/points.txt }} to activity {com.android.pack/com.android.pack.TestActivity}: java.lang.NullPointerException 01-09 12:04:48.698: E/AndroidRuntime(4990): at android.app.ActivityThread.deliverResults(ActivityThread.java:2653) 01-09 12:04:48.698: E/AndroidRuntime(4990): at android.app.ActivityThread.handleSendResult(ActivityThread.java:2695) 01-09 12:04:48.698: E/AndroidRuntime(4990): at android.app.ActivityThread.access$2000(ActivityThread.java:123) 01-09 12:04:48.698: E/AndroidRuntime(4990): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:969) 01-09 12:04:48.698: E/AndroidRuntime(4990): at android.os.Handler.dispatchMessage(Handler.java:99) 01-09 12:04:48.698: E/AndroidRuntime(4990): at android.os.Looper.loop(Looper.java:130) 01-09 12:04:48.698: E/AndroidRuntime(4990): at android.app.ActivityThread.main(ActivityThread.java:3835) 01-09 12:04:48.698: E/AndroidRuntime(4990): at java.lang.reflect.Method.invokeNative(Native Method) 01-09 12:04:48.698: E/AndroidRuntime(4990): at java.lang.reflect.Method.invoke(Method.java:507) 01-09 12:04:48.698: E/AndroidRuntime(4990): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847) 01-09 12:04:48.698: E/AndroidRuntime(4990): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) 01-09 12:04:48.698: E/AndroidRuntime(4990): at dalvik.system.NativeStart.main(Native Method) 01-09 12:04:48.698: E/AndroidRuntime(4990): Caused by: java.lang.NullPointerException 01-09 12:04:48.698: E/AndroidRuntime(4990): at com.android.pack.TestActivity.perform(TestActivity.java:32) 01-09 12:04:48.698: E/AndroidRuntime(4990): at com.android.pack.TestActivity.onActivityResult(TestActivity.java:64) 01-09 12:04:48.698: E/AndroidRuntime(4990): at android.app.Activity.dispatchActivityResult(Activity.java:3908) 01-09 12:04:48.698: E/AndroidRuntime(4990): at android.app.ActivityThread.deliverResults(ActivityThread.java:2649) 01-09 12:04:48.698: E/AndroidRuntime(4990): ... 11 more </code></pre> <p><strong>Appreciate any help!!</strong></p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload